import Vue from 'vue'
import './plugins/axios'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
import './assets/css/common.css'
import './assets/icon/iconfont.css'
import {getToken, removeToken, removeUser} from "./store/session";
import 'nprogress/nprogress.css'

import Nprogress from 'nprogress'
//cnpm install --save vue-fragment
import Fragment from 'vue-fragment'
import * as echarts from 'echarts';

Vue.prototype.$echarts = echarts
//解决el-sub-menu的直接父标签不是 el-menu的时候，导航栏收缩有问题，这时候el-submenu可以用fragment标签包裹而不是div
Vue.use(Fragment.Plugin)

/*根据开发环境和生成环境替换url*/
/*本来之前是这么替换的，后面用了nginx反向代理，就还是以/api开头*/
var url = '/api';
/*if (process.env.NODE_ENV === 'production')
    url = 'http://localhost:8081';*/

/*开发环境有 vue.config.js配置，生产环境则由nginx配置 */
axios.defaults.baseURL = url; /*所有axios的地址前都会加上url*/
/* 请求拦截 */
axios.defaults.withCredentials = true; //附带token设置
//为所有axios请求带上header-token
axios.interceptors.request.use(
    config => {
        Nprogress.start();
        if (getToken() != null) {
            config.headers["token"] = getToken(); //登录token
        }
        return config;
    },
    err => Promise.reject(err)
);

//所有axios接受的response都在这进行预处理
axios.interceptors.response.use(
    rs => {
        Nprogress.done();
        if (rs.data.code === 205) {
            /*避免发太多alert,到时候很多请求都被拒*/
            if (getToken() != null) {
                removeToken();
                removeUser();
                Vue.prototype.$message({
                    type: "error",
                    message: "身份已过期，请重新登录"
                });
            }
            router.push('/login');
        } else {
            return rs; //不return，实际调用处接受不到
        }
    }
)

Vue.config.productionTip = false

//主页面app.vue
new Vue({
    router,
    render: h => h(App)
}).$mount('#app')
